package br.com.assessoriaesportiva.dao;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

import br.com.assessoriaesportiva.jpautil.Transacional;
import br.com.assessoriaesportiva.model.Usuario;

@Named @Transacional
public class UsuarioDAOImp extends CrudDaoImp<Usuario> implements UsuarioDAO {

	@Inject
	private EntityManager em;

	@Override 
	public Long novo(Usuario usuario) throws EntityExistsException {
		em.persist(usuario);
		return usuario.getId();
	}

	@Override
	public Usuario buscarPorId(Long id) {
		Usuario usuario = em.find(Usuario.class, id);
		return usuario;
	}

	@Override
	public Usuario buscarPorEmail(String email) {
		Usuario result;
		Query query = em.createNamedQuery("Usuario.buscarPEmail");
		try {
			query.setParameter("email", email);
			result = (Usuario) query.getSingleResult();
			return result;
		} catch (NoResultException nre) {
			return null;
		} catch (NonUniqueResultException erro) {
			result = (Usuario) query.getResultList().get(0);
			return result;
		}

	}

	@Override
	public EntityManager getEm() {
		return em;
	}

}
